/**
 * array.reduce(function(acc, current, index, arr), initialValue);
 * acc: 累计器累计回调的返回值; 它是上一次调用回调时返回的累积值，或者是提供的初始值（initialValue）。
 * current: 数组中正在处理的元素。
 * index: 数组中正在处理的当前元素的索引。 如果提供了initialValue，则起始索引号为0，否则从索引1起始。
 * arr: 调用reduce的数组
 * initialValue: 作为第一次调用 callback函数时的第一个参数的值。 如果没有提供初始值，则将使用数组中的第一个元素。
 */

const arr = [10, 20, 30, 40, 40, 40];

// 求和
let sum = arr.reduce(function (prev, cur, index, array) {
  return prev + cur;
}, 0);
console.log(sum);

// 最大数
let max = arr.reduce(function (prev, cur) {
  return Math.max(prev, cur);
});
console.log(max);

// 去重
const arrDedupReduce = (arr) => {
  return arr.reduce(
    function (prev, cur) {
      prev.indexOf(cur) === -1 && prev.push(cur);
      return prev;
    },
    [arr[0]]
  );
};
const dup = arrDedupReduce(arr);
console.log(dup);
